package api

import (
	"github.com/gogf/gf/net/ghttp"
	"text/app"
	"text/app/service/DaPing"
	"text/library/common"
	"text/library/in"
	"text/library/token"
	"time"
)

// @Summary 获取列表
// @Description 获取列表
// @Tags 大屏展示
// @Param Authorization header string true "Authorization"
// Param data body hello.Example true "body"
// @Param DisEnum query int false "1:低洼地带 2:老人分布 3：留守儿童 4：民情地图 5：工程地图"
// @Param index query int false "页"
// @Param size query int false "数/页"
// Param 列表专用 query string false "枚举 1:低洼地带 2:老人分布 3：留守儿童 4：民情地图 5：工程地图"
// Success 200 {object} hello.Example
// Success 200 boolean boolean
// @Success 200
// Success 200 {array} hello.Example
// @Router /DaPingGetList [Get]
//获取列表
func DaPingGetList(r *ghttp.Request) {
	token.GetToken(r)
	DisEnum := r.GetQueryInt("DisEnum", 0)

	size, index := in.GetPageSize(r) //获取头部分页信息
	list, co := DaPing.GetDaPingList(DisEnum, size, index)
	in.Json200(r, list, co)
}

// @Summary 关键字查询
// @Description 关键字查询
// @Tags 大屏展示
// @Param Authorization header string true "Authorization"
// Param data body hello.Example true "body"
// @Param ID query string false "ID"
// Success 200 {object} hello.Example
// Success 200 boolean boolean
// @Success 200
// Success 200 {array} hello.Example
// @Router /DaPingGetModel [Get]
//关键字查询
func DaPingGetModel(r *ghttp.Request) {
	token.GetToken(r)
	ID := r.GetQueryInt("ID", 0)
	data := new(DaPing.DaPingZuoBiao)
	_, err := app.DB.Where("ID =?", ID).Get(data)
	if err != nil {
		in.Json(r, 500, err)
		return
	}
	in.Json200(r, data)
}

// @Summary 关键字查询投票信息
// @Description 关键字查询投票信息
// @Tags 大屏展示
// @Param Authorization header string true "Authorization"
// Param data body hello.Example true "body"
// @Param ID query string false "ID"
// Success 200 {object} hello.Example
// Success 200 boolean boolean
// @Success 200
// Success 200 {array} hello.Example
// @Router /DaPingGetVote [Get]
//关键字查询投票信息
func DaPingGetVote(r *ghttp.Request) {
	token.GetToken(r)
	ZuoBiaoID := r.GetQueryInt("ID", 0)
	data := new(DaPing.DaPingZuoVote)
	_, err := app.DB.Where("ZuoBiaoID =?", ZuoBiaoID).Get(data)
	if err != nil {
		in.Json(r, 500, err)
		return
	}
	in.Json200(r, data)
}

// @Summary 数据创建
// @Description 数据创建
// @Tags 大屏展示
// @Param Authorization header string true "Authorization"
// @Param data body DaPing.DaPingZuoBiao true "body"
// Param 列表专用 query string false "枚举 1:低洼地带 2:老人分布 3：留守儿童 4：民情地图 5：工程地图"
// Param DisEnum query int false "类型"
// Param TagName query string false "坐标的名称"
// Param Vote query int false "投票数"
// Param Lon query int false "经度"
// Param Lat query int false "纬度"
// Param ImgUrl query string false "图片地址"
// Param Descrtion query string false "描述"
// Success 200 {object} hello.Example
// Success 200 boolean boolean
// @Success 200
// Success 200 {array} hello.Example
// @Router /DaPingCreate [Post]
//数据创建
func DaPingCreate(r *ghttp.Request) {

	token := token.GetToken(r)
	//获取创建的参数
	req := new(DaPing.DaPingZuoBiao)
	in.Read(r, req) //读取r.body里的json数据变成struct结构
	req.InUserID = token.UserID
	req.InUserPhone = token.Phone
	req.InDate = time.Now().Unix()

	if req.DisEnum < 1 || req.DisEnum > 5 {
		in.Json500(r, "请输入正确的类型")

	}
	//查询标签名是否存在
	data := new(DaPing.DaPingZuoBiaoLog)
	co, errors := app.DB.Where("TagName =? && DisEnum=?", req.TagName, req.DisEnum).FindAndCount(&data)
	if co > 0 {
		in.Json500(r, "该坐标的标签名已存在")
		return
	}
	if errors != nil {
		in.Exit(errors)
		return
	}
	//Progress Satisfied 投票率 满意度

	_, err := app.DB.Insert(req)
	if err != nil {
		in.Exit(err)
		return
	}
	//创建添加日志
	model := DaPing.CreateLog(req, token.Name, 1)
	_, errs := app.DB.Insert(model)
	if errs != nil {
		in.Exit(errs)
		return
	}
	in.Json200(r, "添加成功")
}

// @Summary 修改
// @Description 修改
// @Tags 大屏展示
// @Param Authorization header string true "Authorization"
// @Param data body DaPing.DaPingZuoBiao true "body"
// Param ID query int false "ID"
// Param 列表专用 query string false "枚举 1:低洼地带 2:老人分布 3：留守儿童 4：民情地图 5：工程地图"
// Param DisEnum query int false "类型"
// Param TagName query string false "坐标的名称"
// Param Vote query int false "投票数"
// Param Lon query int false "经度"
// Param Lat query int false "纬度"
// Param ImgUrl query string false "图片地址"
// Param Descrtion query string false "描述"
// Success 200 {object} hello.Example
// Success 200 boolean boolean
// @Success 200
// Success 200 {array} hello.Example
// @Router /DaPingUpdate [Put]
//修改
func DaPingUpdate(r *ghttp.Request) {
	token := token.GetToken(r)
	//获取创建的参数
	req := new(DaPing.DaPingZuoBiao)
	in.Read(r, req) //读取r.body里的json数据变成struct结构

	data := new(DaPing.DaPingZuoBiao)
	_, err := app.DB.Where("ID=?", req.ID).Get(data)
	if err != nil {
		in.Exit(err)
		return
	}
	//添加修改日志
	model := DaPing.CreateLog(data, token.Name, 2)
	_, errss := app.DB.Insert(model)
	if errss != nil {
		in.Exit(errss)
		return
	}

	_, errs := app.DB.ID(req.ID).Update(req)
	if errs != nil {
		in.Exit(errs)
		return
	}
	in.Json200(r, "修改成功")

}

// @Summary 投票
// @Description 投票
// @Tags 大屏展示
// @Param Authorization header string true "Authorization"
// @Param ID query int false "ID"
// Param ID query int false "ID"
// Success 200 {object} hello.Example
// Success 200 boolean boolean
// @Success 200
// Success 200 {array} hello.Example
// @Router /DaPingVoteUpdate [Put]
//投票
func DaPingVoteUpdate(r *ghttp.Request) {
	token := token.GetToken(r)

	ID := r.GetQueryInt("ID")
	//Name:=r.GetQueryString("Name")
	Vote := 1
	//查询
	if ID <= 0 {
		in.Json500(r, "请输入工程编号")
		return
	}
	data := new(DaPing.DaPingZuoBiao)
	_, err := app.DB.Where("ID=?", ID).Get(data)
	if err != nil {
		in.Exit(err)
		return
	}
	//判定用户是否投票过
	//DaPing.UpdateVote(r,data.ID,Name)
	DaPing.UpdateVote(r, data.ID, token.Name)
	//创建投票日志
	model := DaPing.CreateVote(data, token.Name)
	//model:=DaPing.CreateVote(data,Name)
	_, errors := app.DB.Insert(model)
	if errors != nil {
		in.Exit(errors)
		return
	}

	data.Vote = data.Vote + Vote
	_, errs := app.DB.ID(ID).Cols("Vote").Update(data)
	if errs != nil {
		in.Exit(errs)
		return
	}
	in.Json200(r, "投票成功")

}

// @Summary 批量删除
// @Description 批量删除
// @Tags 大屏展示
// @Param Authorization header string true "Authorization"
// @Param data body common.IDs true "body"
// Param IDs query string[] false "IDs"
// Success 200 {object} hello.Example
// Success 200 boolean boolean
// @Success 200
// Success 200 {array} hello.Example
// @Router /DaPingDeletes [Delete]
//批量删除
func DaPingDeletes(r *ghttp.Request) {
	token.GetToken(r)
	req := new(common.IDs)
	in.Read(r, req)
	_, err := app.DB.In("ID", req.Ids).Delete(DaPing.DaPingZuoBiao{})
	if err != nil {
		in.Exit(err)
		return
	}
	in.Json200(r, "删除成功")
}

// @Summary 删除
// @Description 删除
// @Tags 大屏展示
// @Param Authorization header string true "Authorization"
// @Param IDs query int false "ID"
// Param IDs query int false "ID"
// Success 200 {object} hello.Example
// Success 200 boolean boolean
// @Success 200
// Success 200 {array} hello.Example
// @Router /DaPingDelete [Delete]
//删除
func DaPingDelete(r *ghttp.Request) {
	token.GetToken(r)
	ID := r.GetQueryInt("ID")
	_, err := app.DB.Where("ID = ?", ID).Delete(DaPing.DaPingZuoBiao{})
	if err != nil {
		in.Exit(err)
		return
	}
	in.Json200(r, "删除成功")
}

// @Summary 二维码
// @Description 二维码
// @Tags 大屏展示
// @Param ID query int false "ID"
// @Param Name query string false "Name"
// Param IDs query int false "ID"
// Success 200 {object} hello.Example
// Success 200 boolean boolean
// @Success 200
// Success 200 {array} hello.Example
// @Router /Qrcode [Get]
//生成二维码
func Qrcode(r *ghttp.Request) {
	ID := r.GetQueryInt("ID")
	Name := r.GetQueryString("Name")
	date := DaPing.VoteQrCode(Name, ID)
	in.Json200(r, date)
}
